#include <func.h>
#include "head.h"

int main(void)
{
    char *ip = "192.168.12.129";
    char*port = "8080";
    // 创建会话进程池
    conversation_status_t ConversationPool[4];
    initConversationPool(ConversationPool,4);
    // 主进程创建socket对象，用于统一接收客户端请求
    int SocketFd;
    // 主进程绑定ip、端口监听客户端TCP请求。
    initClientSocket(&SocketFd,ip,port);
    // 建立epoll集合
    int EpollFd = epoll_create(1);
    epollAdd(SocketFd,EpollFd);
    // 将子进程也加入epoll集合
    for(int i = 0;i<4;i++)
        epollAdd(ConversationPool[i].socket_local_fd,EpollFd);
    // 开始循环监听
    while(true)
    {
        // 创建就绪集合
        struct epoll_event Events[10];
        // 监听并获得就绪集合
        int num = epoll_wait(EpollFd,Events,10,-1);
        // 遍历就绪集合
        for(int i = 0;i < num;i++)
        {
            // 如果是新的socket请求
            if(Events[i].data.fd == SocketFd)
            {
                int NetFd = accept(SocketFd,NULL,NULL);
                printf("有新的请求！\n");
                // 将新的文件描述符指针拷贝给子进程池
                toConversationPool(NetFd,ConversationPool,4);
                close(NetFd);
            }
            // 如果是子进程的空闲消息
            else
            {
                for(int j = 0;j<4;j++)
                    if(ConversationPool[j].socket_local_fd == Events[i].data.fd)
                        ConversationPool[j].status = FREE;
            }
        }
    }
    return 0;
}
